home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Tool Chest / Development Platforms / Macintosh Common Lisp Related / Examples / undefined-functions.lisp < prev    next >
Encoding:
Text File  |  1993-02-01  |  1.9 KB  |  48 lines  |  [TEXT/CCL2]

  1. ;-*- Mode: Lisp; Package: CCL -*-
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;; undefined-functions.lisp
  4. ;;copyright © 1992, 1993, Apple Computer, Inc.
  5.  
  6. ; (undefined-functions) returns a list of undefined functions
  7.  
  8. (in-package "CCL")
  9. (eval-when (:compile-toplevel :execute)
  10.   (require "LISPEQU"))
  11.  
  12. (export 'undefined-functions)
  13.  
  14. (defun find-undefined ()
  15.   (let* ((alist nil))
  16.     (%map-lfuns
  17.      #'(lambda (f)
  18.          (let* ((v (%lfun-vector f)))
  19.            (dotimes (i (%count-immrefs v))
  20.              (multiple-value-bind (imm offset)
  21.                                   (%nth-immediate v i)
  22.                (when (and (eql offset $sym.fapply)
  23.                           (not (functionp (fboundp imm))))
  24.                  (let* ((already (assq imm alist)))
  25.                    (if already
  26.                      (pushnew f (cdr already))
  27.                      (push (list imm f) alist)))))))))
  28.     alist))
  29.  
  30. (defun report-undefined-functions (&optional expected)
  31.   (let* ((undefined (remove-if #'(lambda (u) (memq (first u) expected))
  32.                                (find-undefined))))
  33.     (when undefined
  34.       (format t "~&Undefined function~P:" (length undefined))
  35.       (dolist (u undefined)
  36.         (format t "~&~4t~S referenced from: ~{~%~8t~s~}." (car u) (cdr u))))))
  37.  
  38. (defun undefined-functions ()
  39.   (report-undefined-functions
  40.    '(cl-user::store-setf-method cl-user::setf-function-spec-name cl-user::setf-function-spec-name
  41.      cl-user::define-undefined-method cl-user::report-bad-arg cl-user::%method-function
  42.      cl-user::%function cl-user::%move-method-encapsulations-maybe cl-user::%fhave
  43.      cl-user::forget-encapsulations cl-user::%add-method cl-user::check-defmethod-congruency
  44.      cl-user::make-gf cl-user::lfun-bits cl-user::closure-function cl-user::defmethod-congruency-override
  45.      cl-user::%method-name cl-user::%anonymous-method ccl::%path-get-long-dir-info
  46.      ccl::sort-list-error ccl::compare-file-to-buffer)))
  47.  
  48. ;(undefined-functions)